<?php

class Request
{
    /**
     *  Base Url
     *
     *  @var string
     */
    protected $_portal  = 'index.php';
    protected $_baseUrl = '';

    /**
     *  初始化
     *
     */
    public function __construct()
    {
        $this->_init();
    }

    /**
     *  初始化 BaseUrl
     *
     *  例如當前的應用程式目錄名稱為 project ，
     *  而網址為 http://localhost/project 時，
     *  那麼 BaseUrl 就是 project
     *
     *  設置 BaseUrl 主要的目的是為了讓應用程式可以任意搬移
     *
     */
    protected function _init()
    {
        $this->_baseUrl = pathinfo($_SERVER['SCRIPT_NAME'], PATHINFO_DIRNAME);
    }

    // ====================================================================================================

    /**
     *  設定 BaseUrl
     *  如果程式自動取得的 BaseUrl 不正確時，可以用 setBaseUrl 設定
     */
    public function setBaseUrl($baseUrl)
    {
        $this->_baseUrl = (string) $baseUrl;
    }
    /**
     *  取得 BaseUrl
     *  @return string
     */
    public function getBaseUrl()
    {
        return $this->_baseUrl;
    }

    /**
     *  get host
     *
     */
    public static function getHost()
    {
        $server = self::getServerInfo();
        return $server['HTTP_HOST'] ;
    }

    /**
     *  get Document Root
     *
     */
    public static function getDocumentRoot()
    {
        $server = self::getServerInfo();
        return $server['DOCUMENT_ROOT'];
    }

    // ====================================================================================================

    /**
     *  是否為 GET 要求
     *  @return bool
     */
    public static function isGet()
    {
        $server = self::getServerInfo();
        return (bool) ('GET' == $server['REQUEST_METHOD']);
    }

    /**
     *  是否為 POST 要求
     *  @return bool
     */
    public static function isPost()
    {
        //$server = self::getServerInfo();
        //return (bool) ('POST' == $server['REQUEST_METHOD']);
        return Yii::app()->request->isPostRequest;
    }

    /**
     *  是否為 AJAX 要求 (XmlHttpReqeust)
     *  @return bool
     */
    public static function isAjax()
    {
        $server = self::getServerInfo();
        if( isset( $server["HTTP_X_REQUESTED_WITH"] )) {
            return (bool) (strtolower( $server["HTTP_X_REQUESTED_WITH"] ) == 'xmlhttprequest');
        }
        else {
            return false ;
        }
    }

    public static function isSsl() 
    {
        // apache and IIS 的 ISAPI 都可以正確判斷
        $server = self::getServerInfo();
        return (bool) (isset($server['HTTPS']) && ('on' === strtolower($server['HTTPS'])));
    }

    // ====================================================================================================

    /**
     *  取得 POST 值
     *
     *  @param string $key
     *  @param bool $stripTags 設為 false 時會回傳原始的 POST 值，不會把 html tag 去掉
     *  @return string
     */
    /*
    public static function getPost($key, $stripTags = true)
    {
        return isset($_POST[$key]) ? ($stripTags ? trim(strip_tags($_POST[$key])) : trim($_POST[$key])) : null;
    }
    */
    public static function getPostInfo()
    {
        return $_POST;
    }

    /**
     *  取得 GET 值
     *
     *  @param string $key
     *  @param bool $stripTags 設為 false 時會回傳原始的 GET 值，不會把 html tag 去掉
     *  @return string
     */
    /*
    public static function getQuery($key, $stripTags = true)
    {
        return isset($_GET[$key]) ? ($stripTags ? trim(strip_tags($_GET[$key])) : trim($_GET[$key])) : null;
    }
    */
    public static function getQueryInfo()
    {
        return $_GET;
    }

    /**
     *  取得 POST+GET 值 (POST參數將壓過GET參數)
     *
     *  @return Array
     */
    public static function getRequestInfo()
    {
        return Request::getPostInfo() + Request::getQueryInfo();
    }

    /**
     *  取得 COOKIE 值
     *
     *  @param string $key
     *  @param bool $stripTags 設為 false 時會回傳原始的 POST 值，不會把 html tag 去掉
     *  @return string
     */
    public static function getCookie($key)
    {
        return isset($_COOKIE[$key]) ? trim($_COOKIE[$key]) : null;
    }

    /**
     *  取得 SERVER 值
     *
     *  @return array
     */
    public static function getServerInfo()
    {
        return $_SERVER;
    }

    // ====================================================================================================
    /**
     *  redirect url and EXIT
     *
     *  @param  action ,
     *
     */
    public static function redirect( $controllerAndAction , $params=Array() )
    {
        $currentController = Yii::app()->getController();
        $actions = preg_split("/[\/]+/", $controllerAndAction );

        if( count($actions)==2 ) {
            $action = $actions[0].'/'.$actions[1];
        }
        elseif( count($actions)==1 ) {
            $action = $currentController->getId().'/'.$actions[0];
        }
        else {
            throw new Exception("program error - {$controllerAndAction} 是錯誤的 Request 參數名稱");
        }

        $currentController->redirect( $currentController->createUrl( $action, $params ) );
        exit;
    }

}
